var curPage=0;
var navBar;
var navButtons;
var navPages;


var subNet;
var network;

var bookPage;


var bookContents=[
  {
    title:"计算机导论",
    description:"计算机导论是学习计算机的入门课程，从介绍计算机基础知识入手，拓展延伸到计算机前沿领域。",
    link:"https://max.book118.com/html/2018/0903/6212231155001214.shtm",
    prev:[]
  },
  {
    title:"离散数学",
    description:"是研究离散量的结构及其相互关系的数学学科，是现代数学的一个重要分支。离散的含义是指不同的连接在一起的元素，\
    主要是研究基于离散量的结构和相互间的关系，其对象一般是有限个或可数个元素。离散数学在各学科领域，特别在计算机科学与技术领域有着广泛的应用，\
    同时离散数学也是计算机专业的专业课程，如程序设计语言、数据结构、操作系统、编译技术、人工智能、数据库、算法设计与分析、\
    理论计算机科学基础等必不可少的先行课程。通过离散数学的学习，不但可以掌握处理离散结构的描述工具和方法，为后续课程的学习创造条件，\
    而且可以提高抽象思维和严格的逻辑推理能力，为将来参与创新性的研究和开发工作打下坚实的基础。",
    link:"https://wwt.lanzoui.com/iWDcOw6otxe",
    prev:[]
  },
  {
    title:"程序设计基础",
    description:"程序设计基础主要介绍了面向过程的程序设计的基本思想和方法，包括算法、程序的基本控制结构、数组、函数、指针、文件\
    以及结构化程序设计的基本方法等。通过本课的学习学生可以掌握C语言编程的一般方法和步骤,并具有一定的编程实践能力和利用计算机解决一些实际问题的能力。",
    link:"https://max.book118.com/html/2018/0803/5142301000001304.shtm",
    prev:[]
  },
  {
    title:"数据结构与算法",
    description:"数据结构与算法介绍基本数据结构以及相关的经典算法，强调问题-数据-算法的抽象过程，关注数据结构与算法的时间空间效率，培养学生编写出高效程序从而解决实际问题的综合能力。",
    link:"https://www.jb51.net/books/601046.html",
    prev:[0,1,2]
  },
  {
    title:"面向对象程序设计",
    description:"本课程的主要内容包括：面向对象程序设计的基本概念；C++语言基本语法和简单程序设计、自定义数据类型；函数的定义和使用方法；类和对象的定义和使用；数据的共享与保护；数组、指针和字符串的概念和使用及动态存储分配的方法；继承与派生的概念及定义派生类的方法；多态性的概念及运算符重载、虚函数的实现方法等等。除了C++语言基本语法知识以外，还包括了面向对象程序设计的基本思想和编程方法，并通过大量的实际例子，来示范利用C++程序设计语言和面向对象程序设计技术来解决实际问题的过程和方法。",
    link:"https://max.book118.com/html/2019/0112/6144103101002001.shtm",
    prev:[0,1,2]
  },
  {
    title:"概率统计与随机过程",
    description:"《概率统计和随机过程》是一门研究随机现象统计规律性的数学学科。概率论与生活实践和科学实验有着紧密的联系，是许多新发展的前沿学科，如：控制论，信息论，可靠性理论，人工智能等等的基础，随机过程论目前得到广泛的应用，诸如水文，气象的预测与预报，天体物理，运筹决策，人口理论，可靠性及计算科学等领域都要用到随机过程的理论建立数学模型。课程内容以随机现象为研究对象, 侧重解决随机问题的基本理论与方法，为后续各专业基础课和专业课的学习提供必要的数学理论基础。是面向我校电气工程及其自动化，电子信息工程，通信工程，信息工程，计算机科学与技术，物联网工程，遥感科学与技术，测绘工程等工科专业学生的必修学科基础课程。通过本课程的教学，使学生系统地掌握概率论统计和随机过程的基本理论和基本方法。特别是提出新问题、思考分析问题，培养学生的抽象思维和解决实际问题的能力，从而逐步培养学生的创新思维能力和创新精神。",
    link:"https://www.docin.com/p-1739494175.html",
    prev:[]
  },
  {
    title:"优化方法基础",
    description:"最优化是从所有可能方案中，依据某种指标选择最合理方案的数学分支，是运筹学的一个重要组成部分，在生产实际、工程设计和现代管理中有着广泛的应用。随着计算机科学和人工智能等领域的发展，最优化方法不仅已成为目前各院校普遍开设的一门数学课程，而且也有一些工程技术人员及数值优化工作者迫切希望了解这方面的知识。",
    link:"http://www.lqkweb.com/urlid/uid=21a40a82147d48003de5477c456c7790.html",
    prev:[]
  },
  {
    title:"数学建模",
    description:"数学建模是数学应用、数学软件应用及计算机编程等高度融合的一门课程。通过本课程的学习，逐步培养学生利用数学工具解决实际问题的能力。能够将实际问题“翻译”为数学语言，并进行求解，然后再解释实际现象，并能够应用于实际。达到提高学生的数学素质和应用数学模型解决实际问题的能力。",
    link:"https://www.pan131.com/file/4482668/",
    prev:[1,5,6]
  },
  {
    title:"自动控制原理",
    description:"“自动控制原理”课程是自动化专业及相关专业的学科基础课程，是一门理论与实践并重，工程性、综合性、方法性、实践性很强的课程。",
    link:"http://www.tup.tsinghua.edu.cn/upload/books/yz/072182-01.pdf",
    prev:[0]
  },
  {
    title:"操作系统原理",
    description:"《操作系统原理》主要内容包括：进程管理、内存管理、设备管理、文件系统等核心内容。通过理论学习和实践环节，能掌握操作系统的结构与设计，能分析和设计简单的操作系统，为从事科学研究和工程研发打下坚实的理论基础。通过实践教学环节，使学生初步掌握阅读、分析和裁剪现有开源操作系统的能力；具备设计、实现、开发小型或简化的操作系统的基础；培养大型程序设计的方法和技巧，提高学生编制清晰、合理、可读性好的系统程序。",
    link:"http://idl.hbdlib.cn/book/00000000000000/pdfbook/018/017/163889.pdf",
    prev:[2,3]
  },
  {
    title:"组合数学",
    description:"本课程是计算机类的专业基础课，其内容在数据库、程序设计、算法设计与分析、复杂度理论、人工智能、模式识别等课程和领域里都有不同程度的应用，是从事计算机科学研究必须掌握的基本知识，对提高学生的素质具有重要意义。通过学习，了解本课程的研究内容和求解问题的一般方法、特殊方法和技巧，以及在本专业中的地位。掌握用排列组合的基本方法以及用母函数、递推关系、容斥原理、棋盘布局和波利亚（Pólya）定理等理论方法和技巧解决实际工作中的组合计数及其应用问题；了解排列组合的生成算法；了解正整数的分拆及其应用；基本掌握一些简单问题的存在性的证明方法和技巧。",
    link:"http://book.idoubi.net/13361.html",
    prev:[]
  },
  {
    title:"汇编语言",
    description:"汇编语言程序设计是计算机及相关专业的专业基础课程，它是计算机组成原理、操作系统、微机原理与接口等核心课程的必要先修课，并且对于训练学生掌握汇编语言程序设计的基本方法，熟悉汇编语言程序上机操作和程序调试技术有着重要作用。   ",
    link:"https://pan.baidu.com/s/1o7tr7Oe",
    prev:[2]
  },
  {
    title:"形式语言与编译",
    description:"《编译原理》课程是计算机科学与技术专业的必修课程。本课程主要介绍程序设计语言编译程序构造的基本原理和设计方法，包括：编译程序概述、高级语言及其语法描述、词法分析、语法分析、属性文法和语法制导翻译、语义分析和中间代码产生、符号表、运行时存储空间组织、优化、目标代码生成等。",
    link:"https://tc5.us/file/24333903-430267059",
    prev:[2,3]
  },
  {
    title:"计算机组成",
    description:"本课程是计算机专业的一门必修的学科基础课，它的前续课程是数字逻辑、大规模集成电路设计及应用、数据结构等，后继课程是微机原理与接口、计算机系统结构、嵌入式系统及应用等，在硬件范畴的课程体系中起承前启后的作用，也是学习与了解计算机软件课程（如操作系统、汇编语言程序设计等）的课程基础。",
    link:"https://ebook365.org/50372",
    prev:[0]
  },
  {
    title:"计算机网络原理",
    description:"《计算机网络原理》课程是计算机科学与技术专业、软件工程专业、物联网工程专业的核心课程之一，是计算机科学技术领域专业人才培养的基础，在计算机学科课程体系建设中处于重要的地位。本课程以TCP/IP 网络体系结构作为主线，以 Internet 的应用为导向来讲解计算机网络原理及其应用。",
    link:"https://www.manongbook.com/other/2129.html",
    prev:[0]
  },
  {
    title:"数据库系统",
    description:"本课程将系统讲述数据库系统的基础理论、基本技术和基本方法。本课程的知识内容和技术方法，对从事现代数据管理技术的应用、开发和研究的人员都是重要而必备的基础。",
    link:"http://yun.java1234.com/article/947",
    prev:[2,3]
  },
  {
    title:"算法分析与设计",
    description:"算法分析与设计是一门理论性与实践性兼顾的课程，主要介绍算法分析与设计的基本理论、思想和方法，介绍枚举、递推、贪心、分治、动态规划、回溯、分支限界、网络流、图算法、随机算法等算法设计策略和分析方法。从各个应用领域的大量实际问题出发，分析问题的性质，建立合理的数学模型，选择合适的数据结构，设计结构清晰、正确高效的算法解决之，分析比较算法的性能以及提高算法性能的技巧，培养初步的算法设计与分析能力，培养计算思维和分析解决实际问题的能力，提高学生的科研素质和创新能力。通过实验实践进一步培养算法实现、调试测试和结果分析的基本能力，强化专业核心意识和职业素养，为学习其他专业课奠定扎实的基础。",
    link:"https://max.book118.com/html/2020/0505/7134100163002132.shtm",
    prev:[3,10]
  }
];
function closeBookPage()
{
  bookPage.style.display="none";
}
function showPage(index)
{
    if(index != curPage)
    {
        
        navPages[curPage].style.display="none";
        buttons[curPage].style.backgroundColor="cornflowerblue";
        buttons[curPage].style.color="white";
  
        curPage=index;
        buttons[curPage].style.backgroundColor="crimson";
        buttons[curPage].style.color="yellow";

        navPages[curPage].style.display="inline";
        navPages[curPage].style.animationPlayState="running";

    }   
}

function bookClick(object){

    let index=object["nodes"];
    if(index == -1)return;
    bookPage.style.display="block";
    document.getElementById("bookTitle").innerHTML=bookContents[index]["title"];
    document.getElementById("bookDescription").innerHTML=bookContents[index]["description"];
    document.getElementById("bookLink").href=bookContents[index]["link"];

}
function initialize()
{
  navBar = document.getElementById("navBar");
  buttons = navBar.getElementsByTagName("p");
  subNet = document.getElementById("subjectNet");
  bookPage=document.getElementById("bookPage");
  navPages = [subNet];
  navPages.push(...document.getElementsByClassName("defContent"));


  buttons[curPage].style.backgroundColor="crimson";
  buttons[curPage].style.color="yellow";
  subNet.style.display="inline";
  subNet.style.opacity='1';
  // subNet.style.display='inline';


  let bookNodes=[{id:-1,label:"双击查看书籍详情",title:"双击查看书籍详情",x:0,y:0}];
  let bookEdges=[];
  for(let i = 0;i<bookContents.length;i++)
  {
    bookNodes.push({
      id:i,label:bookContents[i]["title"],shape:"image",image:"../resource/book.png"
    });
    for(let j = 0;j<bookContents[i]["prev"].length;j++)
    {
      bookEdges.push({ from: bookContents[i]["prev"][j], to: i ,arrows :'to'});
    }
  }


  var networkNodes = new vis.DataSet(bookNodes);
  var networkEdges = new vis.DataSet(bookEdges);

  // create a network
  var data = {
    nodes: networkNodes,
    edges: networkEdges,
  };

  var options = {
    interaction: { hover: true },
    physics:{enabled:false},
    nodes: {
        borderWidth: 3,
        size: 30,
        color: {
          border: "rgb(0,128,255)",
          background: "rgb(0,128,255)",
        },
        font: { color: "yellow" },
        shapeProperties: {
          useBorderWithImage: true,
        },
      },
      edges: {
        color: "lightgray",
      },
  };

  network = new vis.Network(subNet, data, options);
  network.on("doubleClick",bookClick);
}